/*
*
* This file is part of Luces de 1984 (L1).
* Copyright (C) <2017>  <alkeon> [alkeon@autistici.org]
   
* L1 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L1 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with l1.  If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <string>
#include <fstream>
#include <sstream>
#include "metodos.h"
#include "ncurses.h"
#include "gp.h"
using namespace std;
void juego::falso(Personaje& v,Personaje& h){
	
	this->printa("Narrador:Aprovechas una piedra del suelo y la tiras hacia el pasillo.\n");
	this->printa("Narrador:Los dos policías salen en busca de ella, a ver si era el ruido de un prisionero escapándose.\n");
	this->printa("Narrador:Ahora tienes la oportunidad de escapar\n");
	this->pausa();
	this->huida_ruidosa(v,h);
}
void juego::huida_ruidosa(Personaje& v, Personaje& h){
	guardar("b2", v);
	char eleccion[2];
	this->printa("Narrador:Rompes todo lo que te rodea que no te permite huir y tienes que escoger\n");
	this->printa("1.-Pegas a los policías distraídos con la piedra.\n");
	this->printa("2.-Vuelves a tirar otra para así coger por donde van ellos.\n");
	this->printa("3.-Subes las escaleras que hay a la izquierda.\n");
	getstr(eleccion);
	switch(eleccion[0]){
		case '1':this->pegas_polis(v,h);break;
		case '2':this->poli_distraido(v,h);break;
		case '3':this->caida_tonta(v,h);break;
		default:this->pegas_polis(v,h);break;
	}
}
void juego::caida_tonta(Personaje& v, Personaje& h){
	this->printa("Narrador:Subiendo las escaleras, te caes porque eres así de torpe. Eso a mí no me pasa porque me contrataron de Narrador.\n");
	this->printa("Narrador:Dejando a un lado mis historias, al caerte te pillan y te encierran en una habitación y allí acabará tu historia.\n");
	this->pausa();
	this->printa(v.nombre+":¡Qué mala suerte!\n"); 

}
void juego::poli_distraido(Personaje& v, Personaje& h){
	this->printa("Narrador:Tiras otra piedra, engañándolos.\n");
	this->printa("Narrador:Continuas con tu camino, escuchando murmullos y voces de fondo.\n");
	this->printa(v.nombre+":¿Esto qué es?\n");
	this->printa("Narrador:Riéndose responde que estás en la cárcel.\n");
	this->pausa();
	this->printa("Desconocido:Como la gran mayoría de los que estamos aquí, serás un preso político.\n");
	this->printa("Narrador:Lees un cartel que pone Newton\n");
	this->printa(v.nombre+":¿Te llamas Newton?\n");
	this->printa("Newton:Sí. ¿Nos ayudas a salir?\n");
	this->printa("1.-"+v.nombre+":¿Cómo? ¿Hay más?.\n");
	this->printa("2.-"+v.nombre+":Lo siento pero prefiero correr antes de que me pillen.\n");
	char eleccion[2];
	getstr(eleccion);
	switch(eleccion[0]){
		case '1':this->ayudas_prisioneros(v,h);break;
		case '2':this->provisiones(v,h);break;
		default:this->psicosis(v,h);break;
	}
}

void juego::pegas_polis(Personaje& v, Personaje& h){
	this->printa("Narrador:Mientras buscaban a quien creían que se había escapado, tú atrapas dos piedras y los golpeas en la nuca.\n");
	this->printa("Narrador:Continuas con tu camino, escuchando murmullos y voces de fondo.\n");
	this->printa(v.nombre+":¿Esto qué es?\n");
	this->printa("Narrador:Riéndose responde que estás en la cárcel.\n");
	this->printa("Desconocido:Como la gran mayoría de los que estamos aquí, serás un preso político.\n");
	this->printa("Narrador:Lees un cartel que pone Newton\n");
	this->printa(v.nombre+":¿Te llamas Newton?\n");
	this->pausa();
	this->printa("Newton:Sí. ¿Nos ayudas a salir?\n");
	this->printa("1.-"+v.nombre+":¿Cómo? ¿Hay más?.\n");
	this->printa("2.-"+v.nombre+":Lo siento pero prefiero correr antes de que me pillen.\n");
	char eleccion[2];
	getstr(eleccion);
	switch(eleccion[0]){
		case '1':this->ayudas_prisioneros(v,h);break;
		case '2':this->ahogo(v,h);break;
		default:this->ayudas_prisioneros(v,h);break;
	}
}
void juego::ayudas_prisioneros(Personaje& v, Personaje& h){
	
	this->printa("Newton:Busca una ganzúa, la contraseña de la zona de suministros es doscientos setenta y cinco.\n");
	this->printa(v.nombre+":No prometo nada.\n");
	this->printa(v.nombre+":¿Dónde se encuentra la zona de suministros?\n");
	this->printa("Narrador:Después de una gran cantidad de indicaciones te pones en camino pero antes te dice el lugar donde están los uniformes porque te estarán buscando.\n");
	this->pausa();
	this->printa("Narrador:Comienzas la búsqueda de la ganzúa.\n");
	this->printa("Narrador:Al llegar esperas para evitar encontrarte un policía.\n");
	this->printa("Narrador:Mientras esperabas, miras a un lado y encuentras un conejo de papel que lleva escrito \"River y John\".\n");
	this->printa(v.nombre+":Esto me suena de algo\n"); 
	this->printa("Narrador:Se ha ido el policía y te plantas frente a una puerta que parece la que te indicó Newton.\n");
	this->printa("Narrador:Al abrir la puerta suena la alerta y decides correr.\n");
	this->printa("Narrador: Durante el paseo te encuentras una habitación con la puerta entreabierta\n");
	this->printa("1.- Entras\n");
	this->printa("2.- Continuas tu camino\n");
	char eleccion[2];
	getstr(eleccion);
	switch(eleccion[0]){
		case '1':this->printa("Narrador:Ves un baúl donde hay una ganzúa que decides coger\n");v.ganzua=1;break;
		case '2':this->printa("Narrador:Te pones en camino con la duda de saber que había en el interior de esa habitación\n");break;
		default:this->printa("Narrador:Ves un baúl donde hay una ganzúa que decides coger\n");v.ganzua=1;break;
	}
	this->vuelves(v,h);
}

void juego::vuelves(Personaje& v,Personaje& h){
	guardar("b3", v);
	this->printa("Narrador:Llegas después de un rato.\n");
	if (v.ganzua==1){

		this->printa(v.nombre+":Newton lo he logrado.\n");

		this->printa("Newton:Tampoco te creas que ha sido un gran logro que lo tenías todo.\n");

		this->printa(v.nombre+":Sigo teniendo la ganzúa yo, así que ten cuidado.\n");

		this->printa("Newton:Vale, pero se supone que estamos aquí para poder salir de este lugar porque ya el exterior parece una utopía.\n");

		this->printa(v.nombre+":Creo que no se como comenzar.\n");

		this->printa("Narrador:Pruebas con la cerradura a ver si por tanteo lo consigues.\n");
		this->pausa();

		this->printa(v.nombre+":Lo conseguí pero no puedo abrirla todavía. Hay una cerradura por ordenador.\n");

		this->printa("Newton:Busca el ordenador central.\n");

		this->printa(v.nombre+":¿Cómo puedes saber tanto del lugar y dónde estás?\n");

		this->printa("Newton:No preguntes y hazlo.\n");
		this->printa("Newton:La habitación que está subiendo las escaleras a la izquierda\n");

		this->printa("Narrador:Escucháis una puerta que se abre.\n");

		this->printa(v.nombre+":Newton escóndete\n");

		this->printa("Narrador:Como veis que no lleva uniforme le habláis aunque no os disteis cuenta de una navaja que lleva.\n");
		this->printa("Newton:¿Perdona quién eres?\n");
		this->pausa();
		this->printa("Desconocido:Pues me presento soy Ockam\n");
		this->printa(v.nombre+":¿Cómo has llegado hasta aquí?\n");
		this->printa("Ockam:Pues ha sido todo gracias a mi navaja que lo hace todo más sencillo\n");
		this->printa(v.nombre+":¿Ahora qué vas a hacer?\n");
		this->printa("Ockam:Podemos ir juntos, nos haría más fácil sobrevivir.\n");
		this->printa("Narrador:Continuáis el camino acompañados por Ockam, el cual si no me equivoco el objetivo es el ordenador central.\n");
		this->pausa();
		this->ayudantes_cerradura(v,h);
	}else{
		this->printa(v.nombre+":Newton, no he podido, lo siento.\n");
		this->printa("Newton:¡Con lo fácil que era! ¡Era solo tener una ganzúa!\n");
		this->printa("Newton:¡Policía, socorro!\n");
		this->printa(v.nombre+":Será falso.\n");
		this->printa("Narrador:Hablas a otro pidiendo ayuda. Lees carteles, hasta que uno pasa por tu cabeza y le comienzas a pedir ayuda.\n");
		this->printa(v.nombre+":Oye, tú, por favor ayúdame. ¿Te llamas Warwick?\n");
		this->pausa();
		this->printa("Warwick:Sí, me llamo así y aunque te sorprenda tienes una esquina oscura al final del pasillo que te permitirá esconderte.\n");
		this->printa("Narrador:Vas corriendo al lugar indicado y esperas a que se vaya. Cuando se ha ido te acercas a Warwick y le preguntas cómo lo sabía\n");
		this->printa("Narrador:Warwick al percibir tu pregunta abre la puerta de la celda y orgulloso dice que se quiere unir en tu lucha.\n");
		this->printa("Warwick:Mi único problema es que tengo una mano robótica. ¿Te molesta?\n");
		this->printa(v.nombre+":Para nada. ¿Por qué nunca te escapaste?\n");
		this->pausa();
		this->printa("Warwick:¿Qué puede ser más fructífero, alguien que se escapa o alguien que sale cuando todos duermen para poder conocer el lugar y cuando se ve capaz se escapa?\n");
		this->printa(v.nombre+":Pues tú me dirás que hacemos.\n");
		this->warwick_manda(v,h);
	}
}
void juego::warwick_manda(Personaje& v, Personaje& h){
	this->printa("Warwick:Ahora tenemos que buscar al francotirador frontal porque si intentamos salir nos matará directamente de un disparo en la cabeza.\n");
	this->printa(v.nombre+":Si quieres matar deberías buscarte un arma.\n");
	this->pausa();
	this->printa("Narrador:Warwick comienza a reírse.\n");
	this->printa("Warwick:¿Acaso sabes la fuerza que tengo con el brazo robótico?\n");
	this->printa("Warwick:Mejor cállate y vamos a por el francotirador\n");
	this->objetivo_francotirador(v,h);
}
void juego::objetivo_francotirador(Personaje& v, Personaje& h){
	this->printa("Narrador:Después de subir varios pisos con mucha discreción Warwick va hacia hacia una puerta y te dice que busques una pantalla con nueve botones.\n");
	this->printa(v.nombre+":A ver como es lo que me ha mandado Warwick.\n");
	this->printa("Narrador:Al final del pasillo ves el panel con los nueve botones y lo intentas resolver.\n");
	this->resolver_panel(v,h);
}
void juego::crear_panel(Personaje& v, Personaje& h){
	for(int i=0;i<9;i++){
		this->panel[i]=0;
	}
}
void juego::panel_terminal(Personaje& v, Personaje& h){
	
	for(int i=0;i<9;i++){
		if(i==2){		
			this->printa(to_string(this->panel[i])+"\n");
		}else{
			if(i==5){
				this->printa(to_string(this->panel[i])+"\n");
			}else{
				if(i==8){
					this->printa(to_string(this->panel[i])+"\n");
				}else{
					this->printa(to_string(this->panel[i])+"\t");
				}
			}
		}
	}
}
void juego::comprobacion_panel(Personaje& v,Personaje& h){
	int i=0;
	for(int e=0;e<9;e++){
		if(e==3 && this->panel[e]==1){ 
			i++;
		}
		if(e==4 && this->panel[e]==1){
			i++;
		}
		if(e==5 && this->panel[e]==1){
			i++;
		}
		if(e!=3 && e!=4 && e!=5 && this->panel[e]==0){
			i++;
		}
	}
	if(i>=8){
		this->panel_resuelto=1;
		this->printa("LOGRADO\n");
		this->muerte_al_francotirador(v,h);
	}
}
void juego::panel_grafico(Personaje& v, Personaje& h){
	
		this->printa(" ___________\n");
		this->printa("|   |   |   |\n");
		this->printa("| 1 | 2 | 3 |\n");
		this->printa("|___|___|___|\n");
		this->printa("|   |   |   |\n");
		this->printa("| 4 | 5 | 6 |\n");
		this->printa("|___|___|___|\n");
		this->printa("|   |   |   |\n");
		this->printa("| 7 | 8 | 9 |\n");
		this->printa("|___|___|___|\n");
	
}
void juego::resolver_panel(Personaje& v, Personaje& h){
	this->crear_panel(v,h);
	this->panel_grafico(v,h);
	
	while(this->panel_resuelto==0){
		this->printa("Narrador:¿Qué haces con el panel?\n");
		this->printa("1.- Pulsas un botón.\n");
		this->printa("2.- Lo reinicias.\n");
		char accion[2];
		getstr(accion);
		if(accion[0]=='2'){
			this->crear_panel(v,h);
		}else{
			this->pausa();
			this->printa("Narrador:Elige el número de un botón del uno al nueve.\n");
			char eleccion[2];
			int i_eleccion;
			getstr(eleccion);
			stringstream str;
			str << eleccion[0];
			str >> i_eleccion;
			--i_eleccion;
			if(this->panel[i_eleccion]==0){
				++this->panel[i_eleccion];
			}else{
				--this->panel[i_eleccion];
			}
			this->comprobacion_panel(v,h);
		}
		this->panel_terminal(v,h);

	}
	
}

void juego::muerte_al_francotirador(Personaje& v, Personaje& h){
	guardar("b5", v);
	this->printa("Narrador:Vuelves al lugar donde te separaste de Warwick\n");
	this->printa(v.nombre+":¿Warwick, dónde estás?\n");
	this->printa("Warwick:Ya está, podemos salir.\n");
	this->printa(v.nombre+":¿Acaso no tenía un arma?\n");
	this->pausa();
	this->printa("Narrador:¿Qué haces ahora?\n");
	this->printa("1.- Coges todo lo que tenga.\n");
	this->printa("2.- Pasas de todo\n");
	char eleccion[2];
	getstr(eleccion);
	switch(eleccion[0]){
		case '1':this->pasas(v,h);break;
		case '2':this->coges_todo(v,h);break;
		default:this->pasas(v,h);break;
	}
}
void juego::pasas(Personaje& v, Personaje& h){
	this->printa(v.nombre+":Mejor nos damos prisa que nos van a pillar.\n");
	this->printa("Narrador:Sigues a Warwick hacia la salida.\n");	
	this->pausa();
	this->hacia_el_exterior(v,h);
}

void juego::coges_todo(Personaje& v, Personaje& h){
	this->printa("Narrador:Vas al cadáver, coges su francotirador, seis balas y una tarjeta de identificación.\n");
	v.identificacion=1;
	this->printa(v.nombre+":Me parece que así saldremos más rápido.\n");
	this->printa("Warwick:No es una mala idea.\n");
	this->printa(v.nombre+":Quédate tú con el francotirador y las balas Warwick.\n");
	this->pausa();
	this->hacia_el_exterior(v,h);
}

void juego::hacia_el_exterior(Personaje& v, Personaje& h){
	this->printa( "Narrador:Llegáis a la puerta, pasáis la identificación y se te saltan las lágrimas cuando sales del edificio.\n");
	this->printa(v.nombre+":Por fin. ¿Cuántos días me he llevado aquí? ¿Cuántos años? ¿Warwick, qué harás ahora?\n");
	this->printa("Warwick:Ahora entra una nueva etapa en nuestra vida "+v.nombre+". Desde hoy somos los dueños de nuestros destinos.\n");
	this->printa(v.nombre+":¿Qué harás ahora?\n");
	this->pausa();
	this->printa("Warwick:Supongo que ir a un lugar donde nos libremos de la tiranía del gran hermano.\n");
	this->printa(v.nombre+":Yo voy a la ciudad\n");
	this->printa("Warwick:Estás loco, la ciudad ha quedado en ruinas. ¿Qué se te perdió allí?\n");
	this->printa(v.nombre+":No lo sé, tengo recuerdos de mi casa\n");
	this->printa("Warwick:¿Y crees que por un tipo de aprecio especial, tu casa va a resistir a un situación de crisis?\n");
	this->printa(v.nombre+":Crisis, ¿de qué me sonará? No hay palabra más ambigua que esa.\n");
	this->pausa();
	this->conversacion(v,h);
}

void juego::conversacion(Personaje& v, Personaje& h){
	this->printa("Warwick:Ya tras años, sabemos que era una estafa muy sencilla.\n");
	this->printa("Narrador:Se acerca un anciano asmático con unos anteojos y el olor a aguardiente como rasgos distintivos.\n");
	this->printa("Anciano:Todo se repite, un eterno volver a lo mismo. La prensa del pasado fue la televisión de los contemporáneos y la incultura general fue nuestro problema.\n");
	this->printa(v.nombre+":La cultura salvará al decadencia del mundo actual\n");
	this->printa("Anciano:Ni el suicidio colectivo salva a este mundo\n");
	this->printa("Warwick:Alea jacta est\n");
	this->pausa();
	this->printa("Anciano:La libertad es la condena de los más esclavos. Esto es una deformación de la realidad, el ministerio de la libertad nos la roba, los inteligentes encerrados, los tontos tienen un líder que adorar... Todo está deformado, una deformación del teatro. No hay espejo tan cóncavo y grande para esto, comenté a un amigo mío antes de dejar de verlo.\n");
	this->printa("Warwick:¿Eso no es doblepensar?\n");
	this->printa(v.nombre+":Libertad, condena, robo, líder... ¿Esto qué es?\n");
	this->printa("Anciano:Un tropo del esperpento donde no hay ni deformación sistemática, ni teatro, ni dramaturgo...\n");
	v.esperpento=0;
	guardar("-1",v);
}

void juego::ayudantes_cerradura(Personaje& v, Personaje& h){
	guardar("b4", v);	
	this->printa("Narrador:Al bajar por unas escaleras veis gran cantidad de guardias quemados por el suelo\n");
	this->printa(v.nombre+":¿Qué ha pasado aquí?");
	this->printa("Narrador:Una barbacoa... ¿Tú qué crees? Vaya protagonista más tonto me ha tocado comentar.\n");
	this->printa("Ockam:Se ve a alguien por allí\n");
	this->printa("Newton:Tengo miedo.\n");
	this->printa("Ockam:¿Cuál sería la explicación más lógica a esto?\n");
	this->printa(v.nombre+":Pues... yo creo que esto es un entretenimiento de un malvado creador que se dedica a amargarnos la existencia que nos tocó\n");
	this->pausa();
	this->printa("Newton:Menos mal que preguntó por algo sencillo...\n");
	this->printa("Ockam:Dejaos de tonterías y hablemos con esa persona que está a lo lejos.\n");
	this->printa("Narrador:Poco a poco se acercan hasta que llegan a vislumbrar que son dos mujeres.\n");
	this->printa("Una de las desconocidas:¿Quiénes sois?.\n");
	this->printa("La otra desconocida:Están escapando como nosotros mira su ropa.\n");
	this->printa("Una de las desconocidas:Pero aquel tiene ropa de guardia\n");
	this->pausa();
	this->printa(v.nombre+":Es robada no os preocupéis\n");
	this->printa("Sejmet:Buenas, soy Sejmet. Fui la que quemó a esos guardas. Son muy pesados.\n");
	this->printa("Bastet:Yo, Bastet. Me dedico a buscar la salida con ayuda de Sejmet. Soy la lista del grupo\n");
	this->printa("Sejmet:Dejemos eso para otro debate ¿Y vosotros?\n");

	this->printa("Newton:Pues yo soy Newton, él es Warwick y el de la ropa de guarda es "+v.nombre);

	this->printa("Bastet:Veníos con nosotras. Así saldremos antes.\n");
	
	this->printa("Ockam:Nosotros estábamos buscando el ordenador central\n");

	this->printa("Bastet:¿Pero eso para qué lo vais a hacer?\n");
	this->pausa();	
	this->printa("Narrador:Ya no os acordabais ni de lo que querías hacer\n");

	this->printa(v.nombre+":Este sitio me hace sentir raro e incómodo.\n");

	this->printa("Bastet:Ya hemos asesinado al francotirador y podemos huir por la salida que hizo Sejmet\n");
	
	this->printa("Ockam:Por fin una solución sencilla.\n");

	this->printa("Bastet:¿Queréis salir?\n");
	char eleccion[2];
	this->printa("1.- Sí\n");
	this->printa("2.- No\n");
	getstr(eleccion);
	switch(eleccion[0]){
		case '1':this->psicosis(v,h);break;
		case '2':this->soledad(v,h);break;
		default:this->psicosis(v,h);break;
	}
}
void juego::psicosis(Personaje& v, Personaje& h){
	this->printa(v.nombre+":Sí, iremos juntos como siempre.\n");
	this->printa("Narrador:Comienzas a andar y ves como tus amigos se desvanecen.\n");
	this->printa(v.nombre+":Ya hemos salido ¿Dónde estáis todos?\n");
	this->printa("Narrador:No queda nadie.\n");
	this->pausa();
	this->printa(v.nombre+":¿En realidad siempre he estado solo? ¿Quién soy? ¿Dónde fueron?...\n");
	v.psicosis=0;
	getch();
	guardar("-1",v);
}

void juego::soledad(Personaje& v, Personaje& h){
	this->printa(v.nombre+":Yo mejor me quedo aquí. ¿Qué haréis vosotros?\n");
	this->printa("Narrador:Observas como se van.\n");
	this->printa(v.nombre+":Esperad despedíos por lo menos\n");
	this->printa(v.nombre+":Esperadme que voy con vosotros\n");

	this->printa("Narrador:Sales del edificio y ya no están. Te llevas varios días buscando. Hasta que al llegar a la ciudad te desmayas.\n");
	v.soledad=0;
	getch();
	guardar("-1",v);
}
